#Include "Fileio.ch"
#Include "Topconn.ch"
#Include "tbiconn.ch"

/*
+----------------------------------------------------------------------------+
!                             FICHA TECNICA DO PROGRAMA                      !
+----------------------------------------------------------------------------+
!Programa          ! CPL03DMS                                                !
+------------------+---------------------------------------------------------+
!Descricao         ! DMS                                                     !
!                  ! ImportStore.                                            !
!                  ! importacao cadastro de clientes                         !
!                  !                                                         !
+------------------+---------------------------------------------------------+
!Autor             ! TSC505 - Felipe Jose Limas                              !
+------------------+---------------------------------------------------------+
!Data de Criacao   ! 31/05/12                                                !
+------------------+---------------------------------------------------------+
!   ATUALIZACOES                                                             !
+-------------------------------------------+-----------+-----------+--------+
!   Descricao detalhada da atualizacao      !Nome do    ! Analista  !Data da !
!                                           !Solicitante! Respons.  !Atualiz.!
+-------------------------------------------+-----------+-----------+--------+
!                                           !           !           !        !
!                                           !           !           !        !
+-------------------------------------------+-----------+-----------+--------+
!                                           !           !           !        !
!                                           !           !           !        !
+-------------------------------------------+-----------+-----------+--------+
*/



User Function CPL03DMS()

Local nHandle  :=-1
Local cLinha   :=""
Local cQuery   :=""
Local cAli     :=GetNextAlias()
Local cArq     :=StrTran("\dms\gerados\ImportStore_"+DtoS(dDataBase)+Time()+".txt", ":", "")
Local nQtdR    :=0

//campos do arquivo
Local cdStore             := ""
Local cdStatus            := ""
Local cdStoreBrand        := ""
Local dsName              := ""
Local dsCorporateName     := ""
Local cdClass1            := ""
Local cdClass2            := ""
Local cdCity              := ""
Local cdRegion            := ""
Local nmAddress           := ""
Local nrAddress           := ""
Local dsAddressComplement := ""
Local nrZipCode           := ""
Local nmNeighborhood      := ""
Local idInstitutionType   := ""
Local cdLegalCode         := ""
Local cdLegalCode2        := ""
Local cdFrequency         := ""
Local cdEconomicGroup     := ""
Local cdHasContract       := ""
Local dtDueDateContract   := ""
Local cdDebito            := ""
Local cdBussinesType      := ""
Local cdPaymentTerm       := ""
Local cdStoreFiscalClass  := ""
Local cdClosedReason      := ""
Local dsShotName          := ""
Local nrPhone1            := ""
Local nrDDD1              := ""
Local dtStartStore        := ""
Local dtEndStore          := ""
Local cdClienteUrbano     := ""
Local cdClasseVisibilidade:= ""


cQuery:= " SELECT SA1.* "
cQuery+= " FROM  "+RetSqlName("SA1")+" SA1 "
cQuery+= " WHERE "+RetSqlCond("SA1")
cQuery+= " AND (A1_ZDTDMS >= '20121101' OR A1_ZDTDMS = '') "
//cQuery+= "AND A1_ZALTDMS = 'S' "

TCQuery ChangeQuery(cQuery) New Alias &(cAli)
//Conta qtd de registros
Count to nQtdR   

/*layout DMS
   campo				tamanho		obrigatorio
01 cdStore+				45
02 cdStatus+			05
03 cdStoreBrand+		20
04 dsName+				50
05 dsCorporateName+		50
06 cdClass1+			50
07 cdClass2+			50
08 cdCity+				50
09 cdRegion+			25
10 nmAddress+			50
11 nrAddress+			05
12 dsAddressComplement+	50			false
13 nrZipCode+			50			false
14 nmNeighborhood+		50
15 idInstitutionType+	01
16 cdLeCod+				20	
17 cdLeCod2+			20 			false
18 cdFrequency+			50
19 cdEconomicGroup+		40		
20 cdHasContract+		05
21 dtDueDateContract+	branco		false
22 cdDebito+			05  		false
23 cdBussinesType+		50
24 cdPaymentTerm+		20
25 cdStoreFiscalClass+	20   		false
26 cdClosedReason+		20   		false
27 dsShotName+			50        	false
28 nrPhone1+			10     		false
29 nrDDD1+				03			false
30 dtStartStore+		branco
31 dtEndStore+			branco  	false
32 cdClienteUrbano+		05
33 cdClasseVisibilidade	30
*/

If nQtdR > 0
	nHandle:= FCREATE(cArq)
	If nHandle == -1
		conout("Erro ao criar arquivo - ferror " + Str(Ferror()))
	Else
		&(cAli)->(dbGoTop())
		Do While !&(cAli)->(EOF())
			
			cdStore             := Padr(Alltrim(&(cAli)->(A1_COD)) +Alltrim(&(cAli)->(A1_LOJA)),45)+Chr(9)
			do case
				Case Alltrim(&(cAli)->(A1_MSBLQL)) = "1"
					cdStatus:= "DEACT"+Chr(9)
				Case Alltrim(&(cAli)->(A1_MSBLQL)) = "2"
					cdStatus:= "APROV"+Chr(9)
			EndCase
			cdStoreBrand        := Padr(&(cAli)->(A1_ZHOL),20)+Chr(9)
			dsName              := Padr(&(cAli)->(A1_NREDUZ),50)+Chr(9)
			dsCorporateName     := Padr(&(cAli)->(A1_NOME) ,50)+Chr(9)
			cdClass1            := Padr(&(cAli)->(A1_ZCANAL),50)+Chr(9)
			cdClass2            := Padr(&(cAli)->(A1_WTIPNEG),50)+Chr(9)
			cdCity              := Padr(UFKIBOM(&(cAli)->(A1_EST))+Alltrim(&(cAli)->(A1_COD_MUN)),50)+Chr(9)
			
			zcRota  := POSICIONE("DA7",2,xFilial("DA7")+Padr(&(cAli)->(A1_COD),TamSX3("DA7_CLIENT")[1])+Padr(&(cAli)->(A1_LOJA),TamSX3("DA7_LOJA")[1]),"DA7_PERCUR")
			cRegAux := POSICIONE("DA5",1,xFilial("DA5")+Padr(zcRota,TamSX3("DA7_PERCUR")[1]),"DA5_COD")
			cRegAux := IIF(Empty(cRegAux),'5199',cRegAux)
			cdRegion            := Padr(cRegAux,25)+Chr(9)
			
			nmAddress           := Padr(&(cAli)->(A1_END) ,50)+Chr(9) 
			nPosNum             := At(",",&(cAli)->(A1_END))
//			nrAddress           := Padr(&(cAli)->(A1_ZNUMCA) ,5)+Chr(9)
			nrAddress           := Padr(Alltrim(Substr(&(cAli)->(A1_END),nPosNum+1)),05)+Chr(9)
			dsAddressComplement := Padr(&(cAli)->(A1_COMPLEM),50)+Chr(9)
			nrZipCode           := Padr(&(cAli)->(A1_CEP),50)+Chr(9)
			nmNeighborhood      := Padr(&(cAli)->(A1_BAIRRO),50)+Chr(9)
			do case
				Case Alltrim(&(cAli)->(A1_PESSOA)) = "F"
					idInstitutionType   := Alltrim("0")+Chr(9)
				Case Alltrim(&(cAli)->(A1_PESSOA)) = "J"
					idInstitutionType   := Alltrim("1")+Chr(9)
				Otherwise
					idInstitutionType   := Alltrim(" ")+Chr(9)
			EndCase
			
			
			cdLeCod         := Padr(&(cAli)->(A1_CGC),20)+Chr(9)
			
			cdLeCod2        := Padr(&(cAli)->(A1_INSCR),20)+Chr(9)
			
			do case
				Case Alltrim(&(cAli)->(A1_ZFREQUE)) = "1"
					cdFrequency         := Padr("1 X SEMANA",50)+Chr(9)//"QUINZENAL 2/4"+Chr(9)
				Case Alltrim(&(cAli)->(A1_ZFREQUE)) = "2"
					cdFrequency         := Padr("2 X SEMANA",50)+Chr(9)//"QUINZENAL 2/4"+Chr(9)
				Case Alltrim(&(cAli)->(A1_ZFREQUE)) = "3"
					cdFrequency         := Padr("3 X SEMANA",50)+Chr(9)//"QUINZENAL 2/4"+Chr(9)
				Case Alltrim(&(cAli)->(A1_ZFREQUE)) = "4"
					cdFrequency         := Padr("QUINZENAL 1/3",50)+Chr(9)//"QUINZENAL 2/4"+Chr(9)
				Case Alltrim(&(cAli)->(A1_ZFREQUE)) = "5"
					cdFrequency         := Padr("QUINZENAL 2/4",50)+Chr(9)//"QUINZENAL 2/4"+Chr(9)
				Case Alltrim(&(cAli)->(A1_ZFREQUE)) = "6"
					cdFrequency         := Padr("MENSAL",50)+Chr(9)//"QUINZENAL 2/4"+Chr(9)
				Otherwise
					cdFrequency:=Padr(" ",50)+Chr(9)//"QUINZENAL 2/4"+Chr(9)
			EndCase
			
			do case
				Case Empty(&(cAli)->(A1_CODECO))
					cdEconomicGroup     := Padr("SEMGRUPO",40)+Chr(9)
				Case Alltrim(&(cAli)->(A1_CODECO)) = "999999"
					cdEconomicGroup     := Padr("SEMGRUPO",40)+Chr(9)
				Otherwise
					cdEconomicGroup     := Padr(&(cAli)->(A1_CODECO),40)+Chr(9)
			EndCase
			
			
			do case
				Case Alltrim(&(cAli)->(A1_EXCLUSI)) = "000"
					cdHasContract     := Padr("0",5)+Chr(9)
				Otherwise
					cdHasContract     := Padr(&(cAli)->(A1_EXCLUSI),5)+Chr(9)
			EndCase
			
			dtDueDateContract   := ""+Chr(9)
			cdDebito            := Padr(GetAtraso(&(cAli)->(A1_COD), &(cAli)->(A1_LOJA)),5)+Chr(9)
			cdBussinesType      := Padr(&(cAli)->(A1_CANAL),50)+Chr(9)
			cdPaymentTerm       := Padr(Alltrim(fBuscaCpo("SE4", 1, xFilial("SE4")+&(cAli)->(A1_COND), "E4_ZDMS")),20)+Chr(9)
			cdStoreFiscalClass  := Padr(&(cAli)->(A1_PRAZO),20)+Chr(9)
			cdClosedReason      := IIF(Empty(&(cAli)->(A1_DMOTENC)),"", Padr(&(cAli)->(A1_DMOTENC),20))+Chr(9)
			dsShotName          := IIF(EMPTY(&(cAli)->(A1_CONTATO)),"", Padr(&(cAli)->(A1_CONTATO),50))+Chr(9)
			nrPhone1            := IIF(EMPTY(&(cAli)->(A1_TEL)),"", Padr(&(cAli)->(A1_TEL),10))+Chr(9)
			nrDDD1              := IIF(EMPTY(&(cAli)->(A1_DDD)),"", Padr(&(cAli)->(A1_DDD),3))+Chr(9)
			dtStartStore        := Padr(IIF(Empty(&(cAli)->(A1_DTNASC)), "", Alltrim(Left(&(cAli)->(A1_DTNASC), 4)+"-"+SubStr(&(cAli)->(A1_DTNASC), 5, 2)+"-"+Right(&(cAli)->(A1_DTNASC), 2))),10)+Chr(9)
			dtEndStore          := IIF(Empty(&(cAli)->(A1_DTCANC)), "", Alltrim(Left(&(cAli)->(A1_DTCANC), 4)+"-"+SubStr(&(cAli)->(A1_DTCANC), 5, 2)+"-"+Right(&(cAli)->(A1_DTCANC), 2)))+Chr(9)
			cdClienteUrbano     := Padr(&(cAli)->(A1_ZLOCURB),5)+Chr(9)
			cdClasseVisibilidade:= Padr(&(cAli)->(A1_WCLASVI),30)+Chr(9)
			
			cLinha:= cdStore+cdStatus+cdStoreBrand+dsName+dsCorporateName+cdClass1+cdClass2+cdCity+cdRegion+nmAddress+nrAddress+dsAddressComplement+nrZipCode+nmNeighborhood+idInstitutionType+cdLeCod+cdLeCod2+cdFrequency+cdEconomicGroup+cdHasContract+dtDueDateContract+cdDebito+cdBussinesType+cdPaymentTerm+cdStoreFiscalClass+cdClosedReason+dsShotName+nrPhone1+nrDDD1+dtStartStore+dtEndStore+cdClienteUrbano+cdClasseVisibilidade
			FWrite(nHandle, cLinha+Chr(13)+Chr(10))
			
			&(cAli)->(dbSkip())
		EndDo
		
		TcSqlExec("UPDATE "+RetSqlName("SA1")+" SET A1_ZALTDMS = 'N' ")
		
		&(cAli)->(dbCloseArea())
		FClose(nHandle)
		
			/*Tenta se conectar ao servidor ftp na porta 21
		//conexao sera feita com programa externo ws_ftp - gabriel 17/10/2012
		If !FTPCONNECT("189.59.223.136" , 21 ,"FTP_UDB_CPL", "16Access97")
			conout("Nao foi possivel conectar")
			Return .F.
		EndIf
		
		If !FTPUPLOAD(cArq, "/FTP_UDB_CPL/Inbox/"+SubStr(cArq, At("IMPORT", UPPER(cArq))))
			conout("Nao foi possivel realizar o upload!!")
			Return .F.
		EndIf
		FTPDISCONNECT() 
		*/
	EndIf
EndIf

Return cArq

***************************************************
//Indica se o cliente possui titulos em atraso
Static Function GetAtraso(cCli, cLoja)
***************************************************
Local cRet:= "FALSE"
Local aArea:= GetArea()
Local cQuery:= ""
Local cAli:= GetNextAlias()

cQuery:= " SELECT COALESCE(COUNT(*), 0) QTD "
cQuery+= " FROM "+RetSqlName("SE1")+" SE1 "
cQuery+= " WHERE E1_TIPO IN ('NF', 'CH') AND "
cQuery+= "       E1_SALDO > 0 AND "
cQuery+= "       E1_VENCREA < '"+DtoS(dDataBase)+"' AND "
cQuery+= "       E1_CLIENTE = '"+cCli+"' AND "
cQuery+= "       E1_LOJA = '"+cLoja+"' AND "
cQuery+= "      "+RetSqlCond("SE1")
TCQuery ChangeQuery(cQuery) New Alias &(cAli)
cRet:= IIF(&(cAli)->(QTD) == 0, "FALSE", "TRUE")
&(cAli)->(dbCloseArea())

RestArea(aArea)

Return cRet


***********************************
//Retorna o codigo do estado segundo cadastro da KIBOM para geracao dos arquivos do projeto DMS.
Static Function UFKIBOM(cEst)
***********************************
Local cRet:= ""
cEst      := Upper(Alltrim(cEst))

Do Case
	Case cEst == "TO"
		cRet:= cValToChar(17)
	Case cEst == "MA"
		cRet:= cValToChar(21)
	Case cEst == "PI"
		cRet:= cValToChar(22)
	Case cEst == "CE"
		cRet:= cValToChar(23)
	Case cEst == "RN"
		cRet:= cValToChar(24)
	Case cEst == "PB"
		cRet:= cValToChar(25)
	Case cEst == "PE"
		cRet:= cValToChar(26)
	Case cEst == "AL"
		cRet:= cValToChar(27)
	Case cEst == "SE"
		cRet:= cValToChar(28)
	Case cEst == "BA"
		cRet:= cValToChar(29)
	Case cEst == "MG"
		cRet:= cValToChar(31)
	Case cEst == "ES"
		cRet:= cValToChar(32)
	Case cEst == "RJ"
		cRet:= cValToChar(33)
	Case cEst == "SP"
		cRet:= cValToChar(35)
	Case cEst == "PR"
		cRet:= cValToChar(41)
	Case cEst == "SC"
		cRet:= cValToChar(42)
	Case cEst == "RS"
		cRet:= cValToChar(43)
	Case cEst == "MS"
		cRet:= cValToChar(50)
	Case cEst == "MT"
		cRet:= cValToChar(51)
	Case cEst == "GO"
		cRet:= cValToChar(52)
	Case cEst == "DT"
		cRet:= cValToChar(53)
EndCase

Return cRet
